package br.com.tiespec.ejb.Ejb;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Stateless;

import br.com.tiespec.ejb.Dao.AnexoDAO;
import br.com.tiespec.ejb.Dao.ArtefatoDAO;
import br.com.tiespec.ejb.Dao.DocumentoDAO;
import br.com.tiespec.ejb.Dao.ProjetoDAO;
import br.com.tiespec.ejb.EjbInterface.ArtefatoInterface;
import br.com.tiespec.model.Enum.TipoSortOrder;
import br.com.tiespec.model.Modelo.Anexo;
import br.com.tiespec.model.Modelo.Artefato;
import br.com.tiespec.model.Modelo.Documento;
import br.com.tiespec.model.Modelo.Projeto;
import br.com.tiespec.model.Util.RNException;

@Stateless(mappedName = "ArtefatImpl")
@Local(value=ArtefatoInterface.class)
public class ArtefatoImpl implements ArtefatoInterface {

	private static final long serialVersionUID = 1L;

	@EJB ArtefatoDAO aDao;
	@EJB AnexoDAO anexoDao;
	@EJB DocumentoDAO dDao;
	@EJB ProjetoDAO pDao;
	
	@Override
	public void salvarArtefato(Artefato artefatoInstance) throws RNException {
		try {
			aDao.save(artefatoInstance);
		} catch (Exception e){
			e.printStackTrace();
			throw new RNException(e);
		}
	}
	@Override
	public void atualizarArtefato(Artefato artefatoInstance) throws RNException {
		try {
			aDao.update(artefatoInstance);
		} catch (Exception e){
			e.printStackTrace();
			throw new RNException(e);
		}
	}
	
	@Override
	public void excluirArtefato(Long idArtefato) throws RNException {
		try {
			aDao.remover(idArtefato);
		} catch (Exception e){
			e.printStackTrace();
			throw new RNException(e);
		}
	}
	
	@Override
	public List<Artefato> listarArtefato(int first, int pageSize,
			String sortField, TipoSortOrder sortOrder,
			Long idClientePortal, String varBuscaNome, String varBuscaProjeto,
			String varBuscaDescricao) {
		return aDao.listarArtefato(first, pageSize, sortField, sortOrder, 
				idClientePortal, varBuscaNome, varBuscaProjeto, varBuscaDescricao);
	}
	
	@Override
	public int countArtefato(Long idClientePortal, String varBuscaNome,
			String varBuscaProjeto, String varBuscaDescricao) {
		return aDao.countArtefato(idClientePortal, varBuscaNome, varBuscaProjeto, varBuscaDescricao);
	}
	
	@Override
	public Artefato selecionarArtefato(Long id) {
		return aDao.selecionar(id);
	}
	
	@Override
	public Artefato selecionarArtefatoCompleto(Long id) {
		return aDao.selecionarCompleto(id);
	}
	
	@Override
	public Artefato selecionarArtefatoComUsuarioEProjeto(Long id) {
		return aDao.selecionarComUsuarioEProjeto(id);
	}
	
	@Override
	public List<Anexo> listarAnexo(int first, int pageSize, String sortField,
			TipoSortOrder sortOrder, Long idArtefato, String nome) {
		return anexoDao.listarAnexo(first, pageSize, sortField, sortOrder, idArtefato, nome);
	}
	
	@Override
	public int countAnexo(Long idArtefato, String nome) {
		return anexoDao.countAnexo(idArtefato, nome);
	}
	
	@Override
	public Anexo selecionarAnexo(Long id) {
		return anexoDao.selecionar(id);
	}
	
	@Override
	public void salvarAnexo(Anexo anexoInstance) throws RNException {
		try {
			anexoDao.save(anexoInstance);
		} catch (Exception e){
			e.printStackTrace();
			throw new RNException(e);
		}
	}
	
	@Override
	public void excluirAnexo(Long idAnexo) throws RNException {
		try {
			anexoDao.remover(idAnexo);
		} catch (Exception e){
			e.printStackTrace();
			throw new RNException(e);
		}
	}
	
	@Override
	public List<Documento> listarDocumento(int first, int pageSize,
			String sortField, TipoSortOrder sortOrder, Long idArtefato, String nome) {
		return dDao.listarDocumento(first, pageSize, sortField, sortOrder, idArtefato, nome);
	}
	
	@Override
	public int countDocumento(Long idArtefato, String nome) {
		return dDao.countDocumento(idArtefato, nome);
	}
	
	@Override
	public Documento selecionarDocumento(Long id) {
		return dDao.selecionar(id);
	}
	
	@Override
	public void salvarDocumento(Documento documentoInstance) throws RNException {
		try {
			anexoDao.save(documentoInstance);
		} catch (Exception e){
			e.printStackTrace();
			throw new RNException(e);
		}
	}
	@Override
	public void excluirDocumento(Long idDocumento)
			throws RNException {
		try {
			dDao.remover(idDocumento);
		} catch (Exception e){
			e.printStackTrace();
			throw new RNException(e);
		}
	}
	
	@Override
	public List<Projeto> listarProjeto(int first, int pageSize,
			String sortField, TipoSortOrder sortOrder, Long idClientePortal,
			String varProjetoCodigo, String varProjetoNome,
			String varProjetoCliente) {
		return pDao.listarProjeto(first, pageSize, sortField, sortOrder, idClientePortal, 
				varProjetoCodigo, varProjetoNome, varProjetoCliente);
	}
	
	@Override
	public int countProjeto(Long idClientePortal, String varProjetoCodigo,
			String varProjetoNome, String varProjetoCliente) {
		return pDao.countProjeto(idClientePortal, varProjetoCodigo, varProjetoNome, varProjetoCliente);
	}
	
	@Override
	public Projeto selecionarProjeto(Long idProjeto) {
		return pDao.selecionar(idProjeto);
	}
}